<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<ui:composition
	template="/resources/plantillas/responsive.template.xhtml"
	xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:rich="http://richfaces.org/rich">
	<ui:define name="principal">
	<script>
	//		$('#resp_principal').load('#{request.contextPath}/api_content.html')
	</script>
	
	
			<h1 style="">PlaMDeP JAVA API</h1>

			<rich:tabPanel switchType="client" styleClass="colorPrincipal">
				<rich:tab name="Descripción">	
				<h2>Descripción</h2>
		<p>PlaMDeP ofrece un API de desarrollo de algoritmos de
			detección de plagio, actualmente este API es exclusivo para
			lenguaje JAVA. .</p>
		<p>La finalidad del api es la de facilitar el desarrollo de nuevos
			algoritmos de detección de plagio, para lo cual el api cuenta
			con algunas funcionalidades, las cuales se encuentran ubicadas en
			diferentes módulos, los cuales trabajan independientemente. A
			continuación se describirán los módulos
			más importantes.</p>





		<h2>Modulo de comunicación</h2>
		<p>Es el encargado de descargar contenido de las paginas web y
			también de realizar la conexión a los motores de
			búsqueda.</p>
		<h3>Descarga de contenido</h3>
		<p>Descarga tanto páginas web como documentos doc, pdf,
			txt. Para luego poder extraer el texto de esos documentos.</p>
		<h3>Conexión a motores de búsqueda</h3>
		<p>Se encarga de realizar las búsquedas en la web, para lo
			cual recibe un parámetro de texto con el contenido que se
			desea buscar, se trabaja con tres buscadores google, yahoo y bing.
			Para cada buscador existe un método llamado extractor de
			links, el cual nos devolverá todos los links de las posibles
			fuentes.</p>





		<h2>Modulo de análisis léxico y semántico</h2>
		<p>Tiene la funcionalidad de brindar servicios de análisis
			léxico de texto a los algoritmos disponibles.</p>

		<h3>Funciones del módulo léxico</h3>
		<table rules="all" border="1">

			<tbody>
				<tr>
					<th scope="col">Método</th>
					<th scope="col">Funcionamiento</th>

				</tr>
				<tr>
					<td><strong>Eliminación de stop words</strong></td>
					<td><p>Este método recibe como parámetros un
							array de palabras (párrafo), de las cuales serán
							filtradas las stop words las cuales son consideradas palabras de
							menor relevancia, estas deben ser eliminadas para que el
							procesamiento del algoritmo de detección sea más
							eficiente.</p></td>
				</tr>
				<tr>
					<td><strong>Obtener la palabras más frecuentes</strong></td>
					<td>
						<p>El funcionamiento de este método consiste en dado un
							array de palabras (párrafo o documento), usado un mapeo
							entre la frecuencia de repetición de una determinada
							palabra se filtra solo las de mayor repetición, y se
							devolvera otro array de las palabras con las más
							frecuentes dentro del array original.</p>
					</td>
				</tr>
				<tr>
					<td><strong> Separación y fragmentación
							del texto</strong></td>
					<td><p>Su funcionamiento consiste en que dado un texto,
							estos métodos devolverán un arreglo donde se
							encontraran en cada posición un fragmento del texto
							original, separado por algún criterio como por ejemplo
							Palabras, Párrafos y N-Gramas.</p></td>
				</tr>

				<tr>
					<td><strong> Acceso a base de datos léxica</strong></td>
					<td><p>Esta base de datos es usada como un diccionario de
							la cual se obtienen para cada palabra del texto
							información tales Como. Listado de sinónimos,
							Listado de antónimos, Listado de posibles significados,
							Listado de traducciones a ingles.</p></td>
				</tr>
				<tr>
					<td><strong>Clasificación de tipo de palabras</strong></td>
					<td><p>Permite obtener un identificador conocido como
							etiquetas eagle, las cuales permiten reconocer el tipo de palabra
							de acuerdo al contexto.</p></td>
				</tr>
				<tr>
					<td><strong> Obtener lema de una palabra</strong></td>
					<td><p>permite obtener la palabra raíz de otra, o
							también conocida como lema.</p></td>
				</tr>
				<tr>
					<td><strong> Lectura de documentos</strong></td>
					<td><p>Permite leer los documentos de tipo PDF, Word y
							TXT, ya sean los sospechosos o los considerados como posibles
							fuentes y extrae el texto de los mismos.</p></td>
				</tr>
			</tbody>
		</table>


				
				
				</rich:tab>
				<rich:tab name="Crear un algoritmo"> 
				

		<h2>Implementación de los servicios de la plataforma en un
			algoritmo</h2>
		<p>Para poder implementar los servicios de la plataforma en un
			algoritmo, lo primero que se tiene que hacer es crear un proyecto
			Java con algún IDE al cual se le deberá agregar la
			librería .jar plamdep-interfaces.jar, el cual contendrá
			todo lo necesario para poder utilizar los servicios tales como
			analizador léxico, párrafos, fuentes, etc; dependiendo
			del tipo de algoritmo que se desea realizar se tendrá que
			realizar una herencia (extends) de las clases Algoritmo
			Comparación o de Algoritmo Extracción.</p>

		<p>Lo que va hacer este extends, es obligar a que el algoritmo
			implementa dos métodos, los cuales serán necesarios
			para que el algoritmo pueda ser compatible a la plataforma, los
			métodos obligatorios son, ejecutar en donde ira la
			lógica del algoritmo, y GetResultadoFinal en donde se
			implementara los resultados que el algoritmo devuelve a través
			de un objeto.</p>

		<p>Cabe destacar que si el algoritmo necesita utilizar una
			librería adicional para su funcionamiento, no se tendrá
			ningún problema debido a que los classLoader permiten cargar
			esas librerias adicionales pero se debe tomar en cuenta que esas
			librerías deben estar especificadas en el classpath del
			algoritmo, una vez hecho todo lo mencionado anteriormente se
			podrá subir el algoritmo a la plataforma, pero cabe mencionar
			que el algoritmo que se pretende subir debe estar bien probando ya
			que si se quiere modificar el algoritmo subido, se tendrá que
			reiniciar la plataforma, por ello se ha creado una versión
			orientada a los desarrolladores en donde se podrá realizar
			pruebas a los algoritmos antes de subirlo a la plataforma para su
			despliegue en ambiente de producción.</p>




		<h2>Pasos para crear un algoritmo</h2>
		<h3>1: Librería necesaria</h3>

		<p>La librería necesaria para crear un algoritmo tanto de
			extracción como de comparación es la
			interface_plamdep.jar la que contiene las interfaces y clases
			requeridas para la implantación de un algoritmo.</p>
		<h3>2:Crear un proyecto java Netbeans/Eclipse</h3>
		<p>Para creación de un proyecto en estos IDES se debe tomar
			en cuenta que los nombres de los paquetes deben tener la
			descripción del algoritmo implementado en este.</p>
		<h3>3:Crear una clase que extienda del tipo de algoritmo a
			programar</h3>
		<p>Dependiendo del tipo de algoritmo a realizar se debe realizar
			diferentes tipo de extends, para el algoritmo de Extracción se
			debe realizar el siguiente extends.</p>
		<p></p>
		<pre class="brush:java">			    extends	ec.edu.ups.cidi.siia.plamdep.utils.interfaces.AlgoritmoExtraccion
			
		</pre>
				(Recibe solo el sospechoso o archivo analizado se encarga de extraer
				el texto que se buscara en internet de este depende la velocidad de
				bsqueda Analiza el sospechoso)<p></p>
		<p>Para el algoritmo de Comparación se realiza el siguiente
			extends</p>
		<p></p>
		<pre class="brush:java">			    extends	ec.edu.ups.cidi.siia.plamdep.utils.interfaces.AlgoritmoComparacion
			
		</pre>
				(recibe 2 textos un sospechoso de plagio con una posible fuente que
				serán comparados)<p></p>
		<h3>4:Implementar los métodos abstractos</h3>
		<p>Dependiendo del tipo de algoritmo se implementaran sus
			métodos correspondientes, para el de extracción se
			implementa los siguientes:</p>
		<pre class="brush:java">			     public String ejecutar() 
			     { 
			      //Lógica para extraer el texto a buscar 
				 }
				</pre>
				
				
				, lo que se debe obtener de esta clase, son los valores de
				keywords el cual es un array de String, cada posición de este es una
				búsqueda contra internet.<p></p>
		<p>Para el de comparación son los siguientes:</p>
		<p></p>
		<pre class="brush:java">			     public String ejecutar() 
			     { 
			      //Lógica para comparar los documentos 
				 }
				</pre>
				si se da error			retorna en el valor de return del metodo,y public ResultadoFinal
			
			
				<pre class="brush:java">			 
				   public ResultadoFinal getResultadoFinal() 
				    {
				    	return resultado; 
				    } 
				</pre>
				en donde se devolverá el resultado de la comparación, todos los resultados se guardan en el objeto Resultado
				final, el cual también puede tener resultados parciales, los cuales
				van en
				<pre class="brush:java">				
					setResultParciales(ArrayList &#60;ResultadoParcial&#62; resultados);
				</pre>
		<pre class="brush:java">				
				setPlagioDocPorcentaje();//	define el porcentaje de plagio detectado 0-100 
		</pre>
		<p></p>
		<h3>5: Funcionalidades proveidas</h3>
		<p>La plataforma ya tiene algunos métodos de utilidades
			para acceder a estos deben usar la variable analizador que ya viene
			por defecto en cada tipo de algoritmo, las utilidades son, eliminar
			stopwords, eliminar caracteres dobles, getParrafos, getRelevantes y
			tokenizar. También se cuenta con variables por defecto como
			texto Sospechoso y un objeto fuente que contiene los datos del
			documento a comparar.</p>
		<h3>6:Exportar el algoritmo como un jar</h3>
		<p>Para exportar como una jar el algoritmos se puede usar tanto en
			Eclipse como Netbeans, Si se usa librerias externas es necesario
			cambiar el classpath manualmente apuntando a las librerias que deben
			estar en las misma ruta del jar del algoritmo</p>
		<h3>Estructuras manejadas</h3>
		<p>Las estructuras que se pueden manejar son: Parrafos ,Palabras y
			Resultado parcial, es recomendable primero convertir el texto a un
			array de Párrafos, porque automáticamente ese texto
			vendrá analizado. Un array de párrafos está
			compuesto de uno de Palabras, el cual contiene algunas utilidades
			como las descritas en la siguiente tabla</p>

		<table rules="all" border="1">
			<tbody>
				<tr>
					<th scope="col"><center>Estructura</center></th>
					<th scope="col"><center>Utilidades</center></th>

				</tr>

				<tr>
					<td>Parrafo</td>
					<td colspan="5">
						<ul>
						</ul>
						<li>getPalabras()</li>
					</td>

				</tr>

				<tr>
					<td>Palabras</td>
					<td colspan="5"><ul></ul>
						<li>getPalaba()</li>
						<li>getTraducciones()</li>
						<li>getSinonimos()</li>
						<li>getAntonimos()</li>
						<li>getLema()</li></td>

				</tr>

			</tbody>
		</table>
				
				
				</rich:tab>
			</rich:tabPanel>
	</ui:define>


</ui:composition>

